package org.quincy.rock.core.dao.sql;

/**
 * <b>表连接类型。</b>
 * <p><b>详细说明：</b></p>
 * <!-- 在此添加详细说明 -->
 * 无。
 * 
 * @version 1.0
 * @author wks
 * @since 1.0
 */
public enum JoinType {
	/**
	 * 内连接
	 */
	INNER_JOIN("inner join"),
	/**
	 * 左连接
	 */
	LEFT_JOIN("left join"),
	/**
	 * 右连接
	 */
	RIGHT_JOIN("right join");

	/**
	 * 操作符。
	 */
	private String op;

	/**
	 * <b>构造方法。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param op 操作符
	 */
	JoinType(String op) {
		this.op = op;
	}

	/**
	 * <b>返回操作运算符。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @return 操作运算符
	 */
	public String op() {
		return this.op;
	}

	/**
	 * <b>是否是名称或符号。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param uName 名称或符号
	 * @return 是否是名称或符号
	 */
	public boolean isNameOrSign(String uName) {
		return uName.equals(this.name()) || uName.equals(this.op);
	}

	/**
	 * <b>根据名称或符号返回操作符。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param name 名称或符号
	 * @return 操作符
	 */
	public static JoinType of(String name) {
		if (name == null)
			throw new NullPointerException("JoinType Name is null");
		String uName = name.toUpperCase();
		for (JoinType joinType : values()) {
			if (joinType.isNameOrSign(uName))
				return joinType;
		}
		throw new IllegalArgumentException("No enum constant JoinType[" + name + "]");
	}
}
